package com.kylin.order.api.web.facade;

import com.kylin.order.api.dto.req.CheckoutOrderReqDTO;
import com.kylin.order.api.dto.req.OrderListReqDTO;
import com.kylin.order.api.dto.req.PlaceOrderReqDTO;
import com.kylin.order.api.dto.resp.CheckoutOrderRespDTO;
import com.kylin.order.api.dto.resp.OrderDetailRespDTO;
import com.kylin.order.api.dto.resp.OrderListInfoRespDTO;
import com.kylin.order.api.dto.resp.PlaceOrderRespDTO;
import com.kylin.shared.common.Pagination;
import com.kylin.shared.common.ResponseWrapper;
import org.springframework.http.MediaType;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

/**
 * 订单业务相关接口
 * @author Damon S.
 * @version v1.0.1
 * @date 2019年10月30日 16:06
 */
@RequestMapping(value = "/api_v1/orders", produces = MediaType.APPLICATION_JSON_VALUE)
public interface OrderPlatformFacade {

    /**
     * 按条件查询订单列表
     * @param orderListReq 下单的商品请求参数
     * @return 返回执行结果信息
     */
    @GetMapping
    ResponseWrapper<Pagination<OrderListInfoRespDTO>> list(
            @RequestBody @Validated OrderListReqDTO orderListReq
    );

    /**
     * 根据订单Id获取订单详情
     * @param orderNo 指定订单No
     * @return 返回订单详情
     */
    @GetMapping("/{orderNo}")
    ResponseWrapper<OrderDetailRespDTO> find(
            @PathVariable String orderNo
    );

    /**
     * 检出下单商品相关信息，用于下单
     * @param checkoutReq 下单的商品请求参数
     * @return 返回执行结果信息
     */
    @GetMapping("/checkout")
    ResponseWrapper<CheckoutOrderRespDTO> checkout(
            @Validated CheckoutOrderReqDTO checkoutReq
    );

    /**
     * 用户执行下单操作
     * @param placementReq 下单请求参数
     * @return 返回执行结果信息
     */
    @PostMapping("/placement")
    ResponseWrapper<PlaceOrderRespDTO> place(
            @RequestBody @Validated PlaceOrderReqDTO placementReq
    );
}
